perm filename NPROM.FAI[CMS,LCS]4 blob sn#349386 filedate 1978-04-19 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00011 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		NEW MONITOR AND BOOTSTRAP PROM.
C00003 00003	RESET
C00005 00004	Enable disk
C00007 00005	START
C00008 00006	MANUAL RESET
C00010 00007	DPY DDT LOOP
C00012 00008	PRINT ADDRESS/VAL
C00014 00009	DISPLAY CHR
C00016 00010	Paper tape loader
C00017 00011	Prom reset and interupt vectors
C00018 ENDMK
C⊗;
;	NEW MONITOR AND BOOTSTRAP PROM.

	.INSERT ASMBL.FAI
   UNDEF←377

; ZPAGE RAM

TFLG:	0
VAL:	0
ADR:	0
	0

	BLOCK 15	;OLD DDT RAM

CUR:	0	;Cursor
	0
SD:	0	;Screen edges
ED:	0

RAS:	0	;Dpy control defaults
ROW:	0
DPY:	0
MIX:	0

BRCODE:	0	;Default bit rate
RSCODE:	0	;Default acia control word
KBCODE:	0	;Default keyboard control word
;RESET
LOC 177274	;LOC 177000
   SRSTR←UNDEF	;System reset register
RST:	PHA	;Save A
   RSTREG←UNDEF	;POWER ON RESET REG
   PORBIT←UNDEF	;POWER ON RESET BIT
	LDA	RSTREG	;CHECK FOR POWER ON RESET
	ANDI	PORBIT
	BNE	MANUAL	;NOT POWER ON
   DSKSEL←176437;Floppy select

	JSR	RSTAK	;Reset stack and decimal mode

;Stack and decimal mode reset
   PDP←377	;STACK DEPTH
RSTAK:	LDXI	PDP	;Get stack depth.
	TXS
	CLD		;CLEAR DECIMAL MODE
	RTS
;Reset ram jumps.
JMPSET:	

;Setup interrupt vectors.
   IVECT←176360 ;Ram interrupt vector table address.
	LDXI	17	;Number of vectors * 2
IVSET:	LDAX	IVDEF	;Default vector setup loop
	STAX	IVECT
	DEX
	BPL	IVSET

   PRIC←176436	;PRI CONTROL REGISTER ADDRESS
	LDAI	UNDEF	;SETUP PRI CONTROL REGISTER
	STA	PRIC
;Enable disk
	LDAI	20	;20 = Head unloaded and
	STA	DSKSEL	;disk init disabled.

   FDSKC←176420	;DISK COMMAND REGISTER
   FDSKT←176421	;DISK TRACK REGISTER
   FDSKS←176422	;DISK SECTOR REGISTER
   FDSKD←176423	;DISK DATA REGISTER
	LDAI	163	;Read 1 IBM sector (128 bytes)
	STA	FDSKC	;from the first sector on the
			;first track.

;SETUP DMA
   FDMAA←176400	;FDSK DMA ADDRESS REGISTER
   FDMAC←176401	;FDSK COUNT REGISTER
   DMACON←176410;DMA COMMAND REGISTER
	LDAI	0	;RESET DMA
	STA	DMACON
	STA	FDMAA	;SETUP DMA ADDRESS
	LDAI	2	;1000
	STA	FDMAA
	LDAI	377	;SETUP DMA COUNT
	STA	FDMAC
	LDAI	201	;CNT=512-1
	STA	FDMAC
	LDAI	141	;ENABLE FDSK DMA
;START
   BOOTS←1000	;BOOTSTRAP START ADDRESS
DMAINT:
DSKINT:	
	JMP	BOOTS	;JUMP TO BOOT START

;Default interupt vectors.
IVDEF:	IVERR	;Error
	PROM
	IVERR	;Error
	PROM
	UNLOAD	;Disable head preload
	PROM
	MODINT	;TTY default
	PROM
	DMAINT	;Disk load and boot
	PROM
	DSKINT	;Disk load and boot
	PROM
	IVERR	;Error

;MANUAL RESET
MANUAL:	LDAI	20	;Unload disk head.
	STA	DSKSEL
	JSR	RCDPY	;Reset chr dpy
	JSR	RMOD	;Reset BRATE, ACIA, and modem.

;Reset chr dpy
RCDPY:	LDAI	0	;Reset cursor
	STAZ	CUR
	LDAI	DPYRAM
	STAZ	CUR+1

   RASTER←171760;RASTER OFFSET
   CHRROW←171761;CHR ROW OFFSET
   DPYC←171764	;VIDIO CONTROL
   VMIX←171765	;VIDIO MIXER
	LDAI	14	;SET UP DPY DEFAULTS
	STAZ	RAS	;SHOULD BE 0,0
	LDAI	377
	STAZ	ROW
	LDAI	100	;CURSOR ENABLE
	STAZ	DPY
	LDAI	1	;NORMAL MIX
	STAZ	MIX

;Setup screen edges
	LDAI	200
	STAZ	SD	;Upper edge
	LDAI	210
	STAZ	ED	;lower edge
	RTS

;RESET BRATE AND ACIA DEFAULTS
   RSDEF←25	;ACIA CONTROL DEFAULT
RMOD:	LDAI	15	;Set bit rate to 300
	STAZ	BRCODE
	LDAI	RSDEF	;SETUP ACIA DEFAULT
	STAZ	RSCODE
	RTS

;RESET KEY BOARD DEFAULTS
   KBD←173370	;KB DATA REGISTER
   KBC←173371	;KB CONTROL REGISTER
	LDAI	UNDEF	;RESET KB DEFAULT
	STAZ	KBCODE
;DPY DDT LOOP
PCR:	LDAI	15	;PRINT <cr>.
	JSR	PCHR
PLF:	LDAI	12
	JSR	PCHR	;PRINT <cr>
GNEXT:	JSR	GCHR	;Wait for next chr
	ANDI	177

;RAM JUMP

ECHO:	JSR	PCHR	;Echo it
	CMPI	12	;<lf>
	BEQ	LF
	CMPI	60	;Check for octal digit
	BCC	CKCMD
	CMPI	70
	BCS	CKCMD

	ANDI	7
	LDXI	3
SHFT:	ASLZ	TMP
	ROLZ	TMP+1
	DEX
	BNE	SHFT

	ORAZ	TMP
	STAZ	TMP
	INCZ	TFLG	;Set number flag

	JMP	GNEXT	;Wait for next chr

CKCMD:	CMPI	"/"	;Examine
	BEQ	SETAD
	CMPI	"P"	;Proceed
	BEQ	GO
	CMPI	"T"	;TTY
	BEQ	TTY
	CMPI	"B"	;Modem boot
	BEQ	MBOOT
	CMPI	"L"	;Modem load
	BEQ	MLOAD
	CMPI	"U"	;Modem unload
	BEQ	MUNLOD

ERROR:	
	JMP	GNEXT
;PRINT ADDRESS/VAL
PAV:	LDXI	0
	LDAI	1	;# OF DIGITS
	STAZ	NDIG
	STAZ	TFLG	;SET BIT MASK
	LDYI	2	;# OF BITS + C
	JSR	RLOOP	;PRINT "0" OR "1"
	LDAI	5
	STAZ	NDIG
	LDAI	7
	STAZ	TFLG
	JSR	CLOOP	;PRINT 5 OCTAL DIGITS
	LDAI	"/"
	JSR	PCHR	;PRINT "/"
	LDAI	1
	STAZ	NDIG
	LDYI	3
	STYZ	TFLG
	JSR	DLOOP	;PRINT "0" - "3"
	LDAI	2
	STAZ	NDIG
	LDAI	7
	STAZ	TFLG
	JSR	CLOOP	;PRINT 2 OCTAL DIGITS
	RTS

CLOOP:	LDYI	3	;FOR 3 BITS PER DIGIT
RLOOP:	ROLZ	VAL	;ROTATE ADDRESS AND VALUE
	ROLZ	ADR
	ROLZ	ADR+1
DLOOP:	DEY
	BNE	RLOOP
	LDAZ	VAL	;GET NEXT DIGIT
	ANDZ	TFLG
	ORAI	60	;CONVERT TO ASCII
	JSR	PCHR	;PRINT IT (Ram jump)
	DECZ	NDIG
	BNE	CLOOP	;NEXT DIGIT
	RTS
;DISPLAY CHR
PDPY:	STAIX	CUR	;WRITE CHR INTO CHRDPY MEM

	INCZ	CUR	;INCREMENT CURSOR
	LDAZ	CUR
	ANDI	77	;CHECK IF OFF RIGHT EDGE
	BEQ	CRLF	;CLEAR NEXT LINE

   CURREG←171762	;CURSOR CONTROL REGISTERS
UPCUR:	LDAZ	CUR	;UPDATE CURSOR
	STA	CURREG
	LDAZ	CUR+1
	STA	CURREG+1
	RTS

CRLF:	DECZ	CUR	;FIX CURSOR
	LDAZ	CUR
	ANDI	300	;<CR>
	STAZ	CUR	;Fall through to line feed

;LINE FEED
LF:	CLC
	LDAZ	CUR
	ADCI	100	;NEXT LINE
	STAZ	CUR
	BCC	NOTOFF
	INCZ	CUR+1
	LDAZ	CUR+1
	CMPZ	ED	;BOTTOM OF SCREEN
	BEQ	GLITCH
;Clear to end of line
CTEOL:	LDAZ	CUR
	ANDI	77
	EORI	77
	TAY
	LDAI	40	;<space>
CLR:	STAIY	CUR
	DEY
	BNE	CLR
	RTS
;Paper tape loader
PTLOAD:	

;Prom reset and interupt vectors
   LOC 200266	;LOC 177772

NMIV:	NMIINT	;Prom Non maskable interupt vector
	PROM

RSTV:	RST	;Prom reset vector
	PROM

;Prom interupt request vector
IRQV:	0	;0 for PIV enable
	0
END